package com.sunchangming.rpcgen;

/**
 * 
 * @author cm
 * 
 */
public abstract class Type {
	/**
	 * 声明变量的时候，类型名。
	 * 
	 * @param variable
	 *            只要不是Collection/Map类型，这个都可以为空。
	 * @return
	 */
	public abstract String getName(Variable variable);

	/**
	 * 给Collection/Map用的。 当这个Type被放入容器的时候，需要是引用类型而不是值类型。所以这个和getName的结果可能会不同。
	 * 
	 * @return
	 */
	public abstract String getBoxName();

	public abstract String getDefaultValue(Variable variable);

	/**
	 * 序列化
	 * 
	 * @param v
	 * @param osname
	 * @return
	 */
	public abstract String getMarshalStr(Variable v, String osname);

	/**
	 * 反序列化
	 * 
	 * @param v
	 * @param osname
	 * @return
	 */
	public abstract String getUnmarshalStr(Variable v, String osname, boolean usethis);

	public String getTestEqualsStr(Variable variable, String string) {
		return "this." + variable.getName() + ".equals(" + string + "." + variable.getName() + ")";
	}

	public String getHashCodeStr(Variable variable) {
		return "this." + variable.getName();
	}

	public abstract String getFromSqlStr(Variable variable, String string);
}
